package main.leetcode.clockin.October;

/**
 * 925. 长按键入
 *
 * <p>你的朋友正在使用键盘输入他的名字 name。偶尔，在键入字符 c 时，按键可能会被长按，而字符可能被输入 1 次或多次。
 *
 * <p>你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字（其中一些字符可能被长按），那么就返回 True。
 *
 * <p>示例 1：<br>
 * 输入：name = "alex", typed = "aaleex" <br>
 * 输出：true <br>
 * 解释：'alex' 中的 'a' 和 'e' 被长按。
 *
 * <p>示例 2：<br>
 * 输入：name = "saeed", typed = "ssaaedd" <br>
 * 输出：false <br>
 * 解释：'e' 一定需要被键入两次，但在 typed 的输出中不是这样。
 *
 * <p>示例 3： <br>
 * 输入：name = "leelee", typed = "lleeelee" <br>
 * 输出：true
 *
 * <p>示例 4： <br>
 * 输入：name = "laiden", typed = "laiden" <br>
 * 输出：true <br>
 * 解释：长按名字中的字符并不是必要的。
 *
 * <p>提示：<br>
 * name.length <= 1000 <br>
 * typed.length <= 1000 <br>
 * name 和 typed 的字符都是小写字母。
 */
public class day21 {
    public static void main(String[] args) {
        System.out.println(new day21().isLongPressedName("leelee", "lleeelee"));
    }

    public boolean isLongPressedName(String name, String typed) {
        if (name == null) {
            return typed == null;
        }
        if (name.length() > typed.length()) {
            return false;
        }
        int i = 0, j = 0;
        while (j < typed.length()) {
            if (i < name.length() && name.charAt(i) == typed.charAt(j)) {
                ++i;
                ++j;
            } else if (j > 0 && typed.charAt(j) == typed.charAt(j - 1)) {
                ++j;
            } else {
                return false;
            }
        }
        return i == name.length();
    }
}
